<?php

/**
 * Description of RepoReportes
 *
 * @author  Mariano Renkine
 * @author  Fernando Arau
 */
class RepoReportes extends Repositorio
{

  function listarReservaPorGabineteEntreFechas($fechaDesde, $fechaHasta)
  {
    $sReserva = new ReservaServicios();
    $sGabinete = new GabineteServicios();
    $array = Array();
    $link = $this->OpenDB();
    $queryGabinetes = "SELECT DISTINCT gabinete FROM reserva WHERE fechaReserva >= '" . $this->SqlDate($fechaDesde) . "' AND fechaReserva <= '" . $this->SqlDate($fechaHasta) . "'";
    $gabinetes = $this->GetSQL($queryGabinetes);
    $this->CloseDB($link);
    for ($i = 0; $i < count($gabinetes); $i++)
    {
      $reservas = Array();
      $dto = new GabineteReservasDTO();
      $g = $sGabinete->buscar($gabinetes[$i]->gabinete);
      $link = $this->OpenDB();
      $query = "SELECT * FROM reserva WHERE gabinete = '" . $gabinetes[$i]->gabinete . "' AND fechaReserva >= '" . $this->SqlDate($fechaDesde) . "' AND fechaReserva <= '" . $this->SqlDate($fechaHasta) . "'";
      $resutlado = $this->GetSQL($query);
      $this->CloseDB($link);
      for ($j = 0; $j < count($resutlado); $j++)
      {
        $reserva = $sReserva->buscar($resutlado[$j]->idReserva);
        $reservas[$j] = $reserva;
      }
      $dto->setGabinete($g);
      $dto->setReservas($reservas);
      $array[$i] = $dto;
    }
    return $array;
  }

  function listarReservaPorTratamientoEntreFechas($fechaDesde, $fechaHasta)
  {
    $sReserva = new ReservaServicios();
    $sTratamiento = new TratamientoServicios();
    $array = Array();
    $link = $this->OpenDB();
    $queryGabinetes = "SELECT DISTINCT tratamiento FROM reserva WHERE fechaReserva >= '" . $this->SqlDate($fechaDesde) . "' AND fechaReserva <= '" . $this->SqlDate($fechaHasta) . "'";
    $tratamientos = $this->GetSQL($queryGabinetes);
    $this->CloseDB($link);
    for ($i = 0; $i < count($tratamientos); $i++)
    {
      $reservas = Array();
      $dto = new TratamientoReservasDTO();
      $t = $sTratamiento->buscar($tratamientos[$i]->tratamiento);
      $link = $this->OpenDB();
      $query = "SELECT * FROM reserva WHERE tratamiento = '" . $tratamientos[$i]->tratamiento . "' AND fechaReserva >= '" . $this->SqlDate($fechaDesde) . "' AND fechaReserva <= '" . $this->SqlDate($fechaHasta) . "'";
      $resutlado = $this->GetSQL($query);
      $this->CloseDB($link);
      for ($j = 0; $j < count($resutlado); $j++)
      {
        $reserva = $sReserva->buscar($resutlado[$j]->idReserva);
        $reservas[$j] = $reserva;
      }
      $dto->setTratamiento($t);
      $dto->setReservas($reservas);
      $array[$i] = $dto;
    }
    return $array;
  }

  function listarReservaPorTerapeutaEntreFechas($fechaDesde, $fechaHasta)
  {
    $sReserva = new ReservaServicios();
    $sTerapeuta = new TerapeutaServicios();
    $array = Array();
    $link = $this->OpenDB();
    $queryTerapeutas = "SELECT DISTINCT terapeuta FROM reserva WHERE fechaReserva >= '" . $this->SqlDate($fechaDesde) . "' AND fechaReserva <= '" . $this->SqlDate($fechaHasta) . "'";
    $terapeutas = $this->GetSQL($queryTerapeutas);
    $this->CloseDB($link);
    for ($i = 0; $i < count($terapeutas); $i++)
    {
      $reservas = Array();
      $dto = new TerapeutaReservasDTO();
      $t = $sTerapeuta->buscar($terapeutas[$i]->terapeuta);
      $link = $this->OpenDB();
      $query = "SELECT * FROM reserva WHERE terapeuta = '" . $terapeutas[$i]->terapeuta . "' AND fechaReserva >= '" . $this->SqlDate($fechaDesde) . "' AND fechaReserva <= '" . $this->SqlDate($fechaHasta) . "'";
      $resutlado = $this->GetSQL($query);
      $this->CloseDB($link);
      for ($j = 0; $j < count($resutlado); $j++)
      {
        $reserva = $sReserva->buscar($resutlado[$j]->idReserva);
        $reservas[$j] = $reserva;
      }
      $dto->setTerapeuta($t);
      $dto->setReservas($reservas);
      $array[$i] = $dto;
    }
    return $array;
  }

  function listarReservas(ReporteReservaDTO $reporteReservaDTO)
  {
    $link = $this->OpenDB();
    $query = "SELECT idReserva, estado, fechaReserva, habitacion, nombreHuesped, terapeuta.nombre + terapeuta.apellido as nombreTerapeuta, gabinete.nombre as nombreGabinete, tratamiento.nombre as nombreTratamiento,
              cliente_eventual.nombre + cliente_eventual.apellido as nombreCliente FROM reserva
              LEFT JOIN tratamiento ON
              reserva.tratamiento = tratamiento.idTratamiento
              LEFT JOIN gabinete ON
              reserva.gabinete = gabinete.idGabinete
              LEFT JOIN terapeuta ON
              reserva.terapeuta = terapeuta.idTerapeuta
              LEFT JOIN cliente_eventual ON
              reserva.cliente = cliente_eventual.idClienteEventual WHERE 1=1 ";
    if ($reporteReservaDTO->getFechaDesde() != NULL)
      $query .= " AND reserva.fechaReserva >= '" . $this->SqlDate($reporteReservaDTO->getFechaDesde()) . "'";
    if ($reporteReservaDTO->getFechaHasta() != NULL)
      $query .= " AND reserva.fechaReserva <= '" . $this->SqlDate($reporteReservaDTO->getFechaHasta()) . "'";
    if ($reporteReservaDTO->getGabinete() != NULL)
      $query .= " AND reserva.gabinete = " . $reporteReservaDTO->getGabinete();
    if ($reporteReservaDTO->getNombre() != NULL)
    {
      $query .= " AND (cliente_eventual.nombre like '%" . $reporteReservaDTO->getNombre()."%'";
      $query .= " OR cliente_eventual.apellido like '%" . $reporteReservaDTO->getNombre() . "%')";
    }
    if ($reporteReservaDTO->getNumero_habitacion_desde() != NULL)
      $query .= " AND reserva.habitacion >= " . $reporteReservaDTO->getNumero_habitacion_desde();
    if ($reporteReservaDTO->getNumero_habitacion_hasta() != NULL)
      $query .= " AND reserva.habitacion <= " . $reporteReservaDTO->getNumero_habitacion_hasta();
    if ($reporteReservaDTO->getTerapeuta() != NULL)
      $query .= " AND reserva.terapeuta = " . $reporteReservaDTO->getTerapeuta();
    if ($reporteReservaDTO->getTratamiento() != NULL)
      $query .= " AND reserva.tratamiento = " . $reporteReservaDTO->getTratamiento();
    if ($reporteReservaDTO->getReservaPendiente() != "false" &&
            $reporteReservaDTO->getReservaTomada() != "false")
    {
      $estado = " AND estado >= 0";
    } elseif (($reporteReservaDTO->getReservaPendiente() == "false" &&
            $reporteReservaDTO->getReservaTomada() == "false"))
    {
      $estado = "";
    } else
    {
      if ($reporteReservaDTO->getReservaPendiente() == "false")
      {
        $estado = " AND estado = 0";
      } else
      {
        $estado = " AND estado > 0";
      }
    }
      $query .= $estado;

    $reservas = $this->GetSQL($query);
    $this->CloseDB($link);
    $reservasDTO = array();
    if (is_array($reservas))
    {
      foreach ($reservas as $reserva)
      {
        $reservaDTO = new ReservaDTO();
        $reservaDTO->setCliente($reserva->nombreCliente);
        $reservaDTO->setEstado($reserva->estado);
        $reservaDTO->setFecha($reserva->fechaReserva);
        $reservaDTO->setGabinete($reserva->nombreGabinete);
        $reservaDTO->setHabitacion($reserva->habitacion);
    //    $reservaDTO->setHora($reserva->hora);
        $reservaDTO->setId($reserva->idReserva);
        $reservaDTO->setNombreHuesped($reserva->nombreHuesped);
        $reservaDTO->setTerapeuta($reserva->nombreTerapeuta);
        $reservaDTO->setTratamiento($reserva->nombreTratamiento);
        $reservasDTO[] = $reservaDTO;
      }
    }   
    return $reservasDTO;
  }

}

?>
